// Definición de variables utilizadas a lo largo de las funciones
var ctrl_afiliado = '/afiliados',
	ctrl_cobertura = '/coberturas', 
	ctrl_contextura = '/contexturas',
	ctrl_cuota = '/cuotas',
	ctrl_documentos = '/documentos',
	ctrl_duenios = '/duenios',
	ctrl_hist_plan = '/historiales_planes',
	ctrl_especie = '/especies',
	ctrl_mascota = '/animales',
	ctrl_pelaje = '/pelajes',
	ctrl_plan = '/planes',
	ctrl_plan_prestacion = '/planes_prestaciones',
	ctrl_prestaciones = '/prestaciones',
	ctrl_prestaciones_extras = '/prestaciones_extras',
	ctrl_prestador = '/prestadores',
	ctrl_raza = '/razas',
	ctrl_veterinaria = '/veterinaris'
	;

/* A partir de un arreglo de valores, arma una cadena que respete el formato de pasaje de parámetros del framework */
function getUrlParametros(parametros)
{
	var url_param = '';
	for (var i = 0; i < parametros.length; i++) {
		url_param = url_param + '/' + parametros[i];
	};

	return url_param;
}

/* Abre el formulario modal correspondiente a un nuevo registro de la entidad especificada */
function editar(entidad, tipoEdicion, parametros){
	var url_datos = '', controlador = '';
	var selector;
	var data_post = {};
	var accion = (tipoEdicion == 'A') ? '/nuevo/' : '/editar/';

	var url_param = getUrlParametros(parametros);

	switch(entidad)
	{
		case 'cobertura':
			url_datos = ctrl_cobertura+'/nueva'+url_param; // Se recibe el id de afiliado
			selector = '#modalNuevaCobertura';
			break;
		case 'cobertura2':
			url_datos = ctrl_cobertura+'/registrar'+url_param; // Se recibe el id de historial plan
			selector = '#modalNuevaCobertura';
			break;
		case 'historial_plan':
			controlador = ctrl_hist_plan;
			selector = '#modalNuevoHistorial';
			break;
		case 'cuota':
			url_datos = ctrl_cuota+'/registrar_pago'+url_param; // Recibe el id del historial plan
			selector = '#modalRegistrarPago';
			break;
		case 'raza':
			controlador = ctrl_raza;
			selector = '#modalEditarRaza';
			break;
		case 'especie':
			controlador = ctrl_especie;
			selector = '#modalEditarEspecie';
			break;
		case 'pelaje':
			controlador = ctrl_pelaje;
			selector = '#modalEditarPelaje';
			break;
		case 'contextura':
			controlador = ctrl_contextura;
			selector = '#modalEditarContextura';
			break;
		case 'prestacion':
			controlador = ctrl_prestaciones;
			selector = '#modalEditarPrestacion';
			break;
		case 'veterinaria':
			controlador = ctrl_veterinaria;
			selector = '#modalEditarVeterinaria';
			break;
		case 'prestador':
			controlador = ctrl_prestador;
			selector = '#modalEditarPrestador';
			break;
		case 'mascota':
			controlador = ctrl_mascota;
			selector = '#modalEditarMascota';
			break;
		case 'duenio':
			controlador = ctrl_duenios;
			selector = '#modalEditarDuenio';
			break;
		case 'plan':
			controlador = ctrl_plan;
			selector = '#modalEditarPlan';
			break;
		case 'plan_prestacion':
			controlador = ctrl_plan_prestacion;
			selector = '#modalEditarPlanPrestacion';
			break;
		case 'prestacion_extra':
			controlador = ctrl_prestaciones_extras;
			selector = '#modalEditarPrestacionExtra';
			break;
		default: return;		
	}

	if(url_datos == '')	url_datos = controlador+accion+url_param;
	mostrarModal(url_datos, selector, data_post);
}

/* Pide confirmación antes de realizar la acción. Valida si la acción puede llevarse a cabo y en ese caso, continúa. */
function borrar(entidad, idEntidad)
{
	bootbox.confirm("¿Seguro que desea continuar?", function(respuesta) {
	  if(respuesta)
	  {
		var controlador = '';
	    var url_eliminar = '';
	    var textMsg = 'No se puede eliminar la ' + entidad + ' elegida ya que existen otros elementos asociados';
	    var accion = '/eliminar/';

	    switch (entidad) {
	        case 'raza':
	            controlador = ctrl_raza;
	            break;
	        case 'especie':
	            controlador = ctrl_especie;
	            break;
	        case 'pelaje':
	            controlador = ctrl_pelaje;
	            textMsg = 'No se puede eliminar el ' + entidad + ' elegido ya que existen otros elementos asociados';
	            break;
	        case 'contextura':
	            controlador = ctrl_contextura;
	            break;
            case 'prestacion':
	            controlador = ctrl_prestaciones;
	            break;
            case 'veterinaria':
	            controlador = ctrl_veterinaria;
	            break;
            case 'prestador':
	            controlador = ctrl_prestador;
	            break; 
            case 'mascota':
	            controlador = ctrl_mascota;
	            break; 
	        case 'afiliado':
	            controlador = ctrl_afiliado;
	            url_eliminar = controlador+'/establecer_estado/'+idEntidad;
	            break; 
            case 'plan':
	            controlador = ctrl_plan;
	            url_eliminar = controlador+'/establecer_baja/'+idEntidad;
	            break;
            case 'documento':
	            controlador = ctrl_documentos; // Se envía el nombre del archivo
	            break; 
	        default: return;
	    }

	    // Si no se hubiera definido otra cosa, utilizo la ruta estándar
	    if(url_eliminar == '') url_eliminar = controlador+accion+idEntidad;

	    // Todos los controladores deben proveer un método "borradoPosible" para facilitar la validación
	    var url_consulta = controlador+'/borradoPosible/'+idEntidad;
		borrarElemento(url_consulta, url_eliminar, textMsg);
	  }
	});
}


/* Abre el formulario modal para ver un registro existente de la entidad especificada */
function ver(entidad, parametros){
	var url_datos = '', controlador = '';
	var selector;
	var data_post = {};

	var url_param = getUrlParametros(parametros);
	var accion = '/ver';

	switch(entidad)
	{
		case 'cobertura':
			controlador = ctrl_cobertura;
			selector = '#modalVerCobertura';
			break;
		case 'duenio':
			controlador = ctrl_duenios;
			selector = '#modalVerDuenio';
			break;
		case 'mascota':
			controlador = ctrl_mascota;
			selector = '#modalVerMascota';
			break;
		default: return;
	}

	if(url_datos == '')	url_datos = controlador+accion+url_param;
	mostrarModal(url_datos, selector, data_post);
}

/* Abre un formulario modal de búsqueda de la entidad recibida como parámetro. Los filtros deben estar
definidos en la página solicitante. */
function buscar(entidad){
	var url_datos;
	var selector;
	var data_post = getFiltros(entidad);
	var accion = '/buscar';
	if(data_post != 'EMPTY') {
		switch(entidad)
		{
			case 'duenio':
				url_datos = ctrl_duenios+accion+'/afiliados-nuevo';
				selector = '#modalBuscarDuenio';
				break;

			case 'mascota':
				url_datos = ctrl_mascota+accion+'/afiliados-nuevo';
				selector = '#modalBuscarMascota';
				break;
		}

		mostrarModal(url_datos, selector, data_post);
	}
	else {
		var elemento_error = document.getElementById('msj_error_busqueda');
		if(elemento_error != null) elemento_error.innerHTML = 'Debe completar algún filtro de búsqueda antes de continuar'; 
	}
}

function getFiltros(entidad)
{
	var data_post = 'EMPTY';
	var completos = true;

	switch(entidad)
	{
		case 'duenio':
		    var nombre_duenio = getValue("filtro_nombre_duenio");
		    var apellido_duenio = getValue("filtro_apellido_duenio");
		    var dni_duenio = getValue("filtro_dni_duenio");

		    var mascota_id = getValue("txt_animal");

		    if(!valor_vacio(nombre_duenio) || !valor_vacio(dni_duenio) || !valor_vacio(apellido_duenio))
		    	data_post = {filtro_nombre_duenio:nombre_duenio, 
		    		filtro_apellido_duenio:apellido_duenio, 
		    		filtro_dni_duenio:dni_duenio, 
		    		mascota:mascota_id};
			break;

		case 'mascota':
			var id_mascota = getValue("filtro_id_mascota");
			var nombre = getValue("filtro_nombre_mascota");
		    var raza = getSelectedIndex("filtro_raza");
		    var contextura = getSelectedIndex("filtro_contextura");
		    var pelaje = getSelectedIndex("filtro_pelaje");
		    var fecha_ingreso = getValue("filtro_fecha_ingreso");
		    var prestador = getSelectedIndex("filtro_prestador");

		    var duenio_id = getValue("txt_duenio");

		    if(!valor_vacio(nombre) || !valor_vacio(fecha_ingreso) || raza > 0 || contextura > 0 || pelaje > 0 || prestador > 0 || !valor_vacio(id_mascota))
		    	data_post = {filtro_nombre_mascota:nombre, 
		    		filtro_raza:raza, 
		    		filtro_contextura:contextura, 
		    		filtro_pelaje:pelaje, 
		    		filtro_fecha_ingreso:fecha_ingreso, 
		    		filtro_prestador:prestador, 
		    		duenio:duenio_id,
		    		filtro_id_mascota:id_mascota};
			break;

		default: data_post = {};
			break;
	}

	return data_post;
}